include make.inc

#OOPS_HOME = /home/s0965328/research/oops
#AMPLSOLVER = /home/s0965328/research/ampl-interface/sys.x86_64.Linux
#METIS_HOME = /home/s0965328/research/metis-4.0.3
#SML_HOME = /home/s0965328/research/sml/trunk

YACC = bison
LEX = flex
CFLAGS = -g 
CXXFLAGS = -I$(AMPLSOLVER) -I$(OOPS_HOME)/include -gstabs
CXX = mpic++
LDFLAGS += -L$(AMPLSOLVER) -lamplsolver -L$(OOPS_HOME)/lib -loops -llapack -lmetis -lgfortran -lefence


OBJECT = AmplModel.o backend.o ExpandedModel.o \
	  SyntaxNode.o OpNode.o ListNode.o SyntaxNodeIx.o SyntaxNodeIDREF.o StageNodeNode.o IDNode.o \
	  SetNode.o SimpleSet.o ListSet.o CompositeSet.o \
	  StochModel.o TimeStamp.o Nlfile.o ModelComp.o\
	  SetValue.o Set.o Param.o ParamValue.o StochModelComp.o SymbolTable.o \
	  Sml.o AmplScript.o AmplScriptWriter.o \
	  data.yy.o data.tab.o sml.yy.o sml.tab.o \

-include $(OBJECT:.o=.d)

all: lex yacc libsml.a

%.o : %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJ_DIR)/$@ 
#	$(CXX) -MM $(CXXFLAGS) $< > $(OBJ_DIR)/$*.d
#	@mv -f $(OBJ_DIR)/$*.d $(OBJ_DIR)/$*.d.tmp
#	@sed -e 's|.*:|$*.o:|' < $(OBJ_DIR)/$*.d.tmp > $(OBJ_DIR)/$*.d
#	@sed -e 's/.*://' -e 's/\\$$//' < $(OBJ_DIR)/$*.d.tmp | fmt -1 | \
#	  sed -e 's/^ *//' -e 's/$$/:/' >> $(OBJ_DIR)/$*.d
#	@rm -f $(OBJ_DIR)/$*.d.tmp

libsml.a: $(OBJECT)
	ar rs $(OBJ_DIR)/libsml.a $(addprefix $(OBJ_DIR)/,$(OBJECT))
	mkdir -p $(SML_HOME)/lib	
	cp -f $(OBJ_DIR)/libsml.a $(SML_HOME)/lib/.

lex:
	$(LEX) -osml.yy.cpp sml.yy.lpp
	$(LEX) -Pdata -odata.yy.cpp data.yy.lpp
yacc:
	$(YACC) -d -osml.tab.cpp sml.tab.ypp
	mv sml.tab.hpp sml.tab.h
	$(YACC) -pdata -d -odata.tab.cpp data.tab.ypp
	mv data.tab.hpp data.tab.h
	$(CXX) $(CXXFLAGS) -c data.yy.cpp -o $(OBJ_DIR)/data.yy.o 
	$(CXX) $(CXXFLAGS) -c  sml.yy.cpp -o $(OBJ_DIR)/sml.yy.o
	$(CXX) $(CXXFLAGS) -c sml.tab.cpp -o $(OBJ_DIR)/sml.tab.o 
	$(CXX) $(CXXFLAGS) -c data.tab.cpp -o $(OBJ_DIR)/data.tab.o 

clean:
	rm -rf $(OBJ_DIR)/*.o $(OBJ_DIR)/*.d
	rm -rf $(OBJ_DIR)/libsml.a
	rm -rf sml.tab.cpp
	rm -rf sml.tab.h
	rm -rf sml.yy.cpp
	rm -rf data.tab.cpp
	rm -rf data.tab.h
	rm -rf data.yy.cpp


